/* 
 微信JSSDK
 安装微信SDK npm install weixin-js-sdk
 */

/* 
 页面内使用
 config: 接口返回的权限验证配置
 shareInfo: 分享参数
 import { useWxSDK } from '@/hooks/useWxSDK.js'
 const { initConfig, onShare } = useWxSDK()
 // 分享
 initConfig(config).then(() => {
	onShare(shareInfo)
 })
 // 分享，监听分享成功和取消分享
 initConfig(config).then(() => {
 	onShare(shareInfo,()={
		// 分享成功
	},()=>{
		// 取消分享
	})
 })
 // 微信扫码
 initConfig(config).then(() => {
 	scanQRCode((res) =>{
		// 扫码成功回调
	},(error) => {
		// 扫码失败回调
	})
 })
 */

//微信js-sdk引入
import * as jweixin from 'weixin-js-sdk'

const defaultConfig = {
    debug: false,
    appId: '',
    timestamp: '',
    nonceStr: '',
    signature: '',
    jsApiList: [
        'checkJsApi',
        'scanQRCode',
        'hideMenuItems',
        'updateTimelineShareData',
        'updateAppMessageShareData'
    ],
    openTagList: []
}

const defaultShareInfo = {
    title: '',
    link: '',
    imgUrl: '',
    desc: ''
}

/**
 * 微信JSSDK Hook
 * @returns {Object} 包含微信SDK操作方法
 */
const useWxSDK = () => {
    /**
     * 初始化微信配置
     * @param {Object} config 微信配置
     * @returns {Promise} 返回初始化结果
     */
    const initConfig = (config = {}) => {
        return new Promise((resolve, reject) => {
            jweixin.config({
                ...defaultConfig,
                ...config
            })
            
            jweixin.ready(() => resolve(true))
            jweixin.error((err) => reject(err))
        })
    }

    /**
     * 设置分享信息
     * @param {Object} shareData 分享数据
     * @returns {Promise} 返回分享设置结果
     */
    const onShare = (shareData = defaultShareInfo) => {
        return new Promise((resolve, reject) => {
            const data = { ...defaultShareInfo, ...shareData }
            
            jweixin.hideMenuItems({
                menuList: []
            })
            
            jweixin.updateTimelineShareData({
                title: data.title,
                link: data.link,
                imgUrl: data.imgUrl,
                success: () => resolve('朋友圈分享设置成功'),
                fail: (err) => reject(err)
            })
            
            jweixin.updateAppMessageShareData({
                title: data.title,
                desc: data.desc,
                link: data.link,
                imgUrl: data.imgUrl,
                success: () => resolve('朋友分享设置成功'),
                fail: (err) => reject(err)
            })
        })
    }

    /**
     * 微信扫一扫
     * @param {Boolean} needResult 是否需要返回结果
     * @returns {Promise} 返回扫码结果
     */
    const scanQRCode = (needResult = true) => {
        return new Promise((resolve, reject) => {
            jweixin.scanQRCode({
                needResult: needResult ? 1 : 0,
                scanType: ["qrCode", "barCode"],
                success: (res) => resolve(res),
                fail: (err) => reject(err)
            })
        })
    }

    return { initConfig, onShare, scanQRCode }
}

export { useWxSDK }